package cls;
// importaciones

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class conexion {

    private Connection conn; // el crea la variable conexion con la base de datos

    // realiza la conexion con la base de datos
    public conexion(String pNombreDB, String pUser, String pPassword) throws ClassNotFoundException, SQLException {
        try {
            String driver = "org.postgresql.Driver"; // se asigna el driver de conexion con base de datos
            Class.forName(driver);
            String connString = "jdbc:postgresql://localhost:5432/" + pNombreDB; //
            String user = pUser;
            String password = pPassword;

            this.conn = DriverManager.getConnection(connString, user, password);
            System.out.println("Conexion realizada con exito");

        } catch (SQLException e) {
            System.out.println(pPassword);
        }
    }
    // da el script del select para la tabla
    public ResultSet select(String pCampos, String pTabla, String pCondicion) {
        ResultSet rs = null; //obtener los datos del select
        Statement s = null; // se utiliza para inicializar la conexión
        String sentencia = "";
        try {
            s = this.conn.createStatement();
            sentencia = " Select " + pCampos + " from " + pTabla; // se crea el select

            if (!pCondicion.isEmpty()) {
                sentencia += " where " + pCondicion;
            }

            rs = s.executeQuery(sentencia); // 
        } catch (Exception e) {
            System.out.printf("Error: " + e.toString());

        }
        return rs;
    }
    
            
                public ResultSet select2(String pCampos, String pTabla, String Orderby){
          ResultSet rs = null; //obtener los datos del select
          Statement s = null; // se utiliza para inicializar la conexión
          String sentencia = "";
          try{
              s = this.conn.createStatement();
              sentencia =" Select " + pCampos + " from " + pTabla; // se crea el select
              if(!Orderby.isEmpty())
              {
                  sentencia+=" "+Orderby;
              }
              rs = s.executeQuery(sentencia); // 
          }
          catch(Exception e){
              System.out.printf("Error: "+ e.toString());
              
          }
        return rs;
      }
    
    
    // da el scrip del insert para la tabla
    public boolean insert(String tabla, String campos) {
        ResultSet rs = null; //obtener los datos del select
        Statement s = null; // se utiliza para inicializar la conexión
        String sentencia = "";
        try {
            s = this.conn.createStatement(); //se crea la conexión
            sentencia = "INSERT INTO " + tabla + " values " + campos; //se arma el insert

            s.execute(sentencia); // Se ejecuta el insert
            return (true);
        } catch (Exception e) {
            System.out.printf("Error: " + e.toString());
            return (false);
        }

    }
    // realiza el update para la tabla
    public boolean actualizar(String tabla, String cambio, String condicion) {

        ResultSet rs = null; //obtener los datos del select
        Statement s = null; // se utiliza para inicializar la conexión
        String sentencia = "";
        try {
            s = this.conn.createStatement(); //se crea la conexión
            sentencia = "update " + tabla + " set " + cambio + " where " + condicion;

            s.execute(sentencia); // Se ejecuta el insert
            return (true);
        } catch (Exception e) {
            System.out.printf("Error: " + e.toString());
            return (false);
        }

    }
    // Realiza la eliminacion en la tabla con el PK que mande
    public boolean eliminar(String tabla, String condicion) {

        ResultSet rs = null; //obtener los datos del select
        Statement s = null; // se utiliza para inicializar la conexión
        String sentencia = "";
        try {
            s = this.conn.createStatement(); //se crea la conexión
            sentencia = "DELETE FROM  " + tabla + " where " + condicion;

            s.execute(sentencia);
            return (true);
        } catch (Exception e) {
            System.out.printf("Error: " + e.toString());
            return (false);
        }

    }

}
